`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 11/17/2021 08:11:29 PM
// Design Name: 
// Module Name: main_config_module
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////


module main_config_module(
    input clk,
    input en,
    input rst_n,
    input key1,
    input key2,
    output [3:0] work0,
    output [3:0] work1,
    output [3:0] rest0,
    output [3:0] rest1,
    output [3:0] dis0,
    output [3:0] dis1,
    output [3:0] dis2,
    output [3:0] dis3
    );
    wire key_value1,key_value2,key_p2,key_n1,key_n2,key_fin1,key_fin2,key_plus,key_last1,key_last2,cout_work,cout_rest,en_work,en_rest,div;
    eliminator elimin1(
        .rst_n(rst_n),
        .clk(clk),
        .key(key1),
        .key_value(key_value1),
        .key_n_flag(key_n1)
    );
    eliminator elimin2(
        .rst_n(rst_n),
        .clk(clk),
        .key(key2),
        .key_value(key_value2),
        .key_p_flag(key_p2),
        .key_n_flag(key_n2)
    );
    key_last_control last_inst(
        .clk(clk),
        .rst_n(rst_n),
        .key_p_flag(key_p2),
        .key_n_flag(key_n2),
        .last(key_last2),
        .key_value(key_fin2)
    ); 
    long_short_selector lss(
        .key_short(key_fin2),
        .clk(clk),
        .key_last(key_last2),
        .key_value(key_value2),
        .rst_n(rst_n),
        .key_out(key_plus) 
    );
    deathadder work_add0(
        .rst_n(rst_n),
        .clk(clk),
        .en(en_work),
        .key_add(key_plus),
        .LD(5),
        .out(work0),
        .cout(cout_work)
    );
    deathadder work_add1(
        .rst_n(rst_n),
        .clk(clk),
        .en(en_work),
        .key_add(cout_work),
        .LD(2),
        .out(work1)
    );
    deathadder rest_add0(
        .rst_n(rst_n),
        .clk(clk),
        .en(en_rest),
        .key_add(key_plus),
        .LD(5),
        .out(rest0),
        .cout(cout_rest)
    );
    deathadder rest_add1(
        .rst_n(rst_n),
        .clk(clk),
        .en(en_rest),
        .key_add(cout_rest),
        .LD(0),
        .out(rest1)
    );
    configManager myconfig(
        .clk(clk),
        .en(en),
        .rst_n(rst_n),
        .key_mode(key_n1),
        .en_work(en_work),
        .en_rest(en_rest)
    );
    flash_light light(
        .clk(clk),
        .rst_n(rst_n),
        .en(en_work),
        .key_value(key_value2),
        .work0(work0),
        .work1(work1),
        .rest0(rest0),
        .rest1(rest1),
        .dis0(dis0),
        .dis1(dis1),
        .dis2(dis2),
        .dis3(dis3)
    );

endmodule
